package com.ck.ips.dao.sys;

import com.ck.common.model.Role;
import com.ck.ips.model.vo.sys.RoleListVO;
import com.ck.ips.model.vo.sys.RoleSelectListVO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface RoleMapper {
	/**
	 * 保存角色
	 *
	 * @param role Role
	 * @return long(主键)
	 */
	void insertRole(Role role);

	/**
	 * 保存角色模块关系
	 */
	void insertRoleModule(@Param("roleId") Long roleId, @Param("moduleIdArray") String[] moduleIdArray);

	/**
	 * 修改角色
	 *
	 * @param role Role
	 */
	void updateRoleById(Role role);

	/**
	 * 根据角色名称获取角色
	 *
	 * @param roleName 角色名称
	 * @return Role(角色)
	 */
	Role getRoleByRoleName(@Param("roleName") String roleName, @Param("status") Integer status);

	/**
	 * 根id获取角色
	 *
	 * @param roleId 角色id
	 * @return Role(角色)
	 */
	Role getRoleById(@Param("roleId") Long roleId);

	/**
	 * 通过角色ID删除角色模块关系
	 *
	 * @param roleId 角色ID
	 */
	void deleteRoleModuleByRoleId(Long roleId);

	/**
	 * 获取角色列表
	 *
	 * @param status   状态
	 * @param roleName 角色名称
	 * @return Page<RoleListDTO>
	 */
	Page<RoleListVO> listRole(@Param("status") Integer status, @Param("roleName") String roleName);

	/**
	 * 获取所有角色列表
	 *
	 * @return List<RoleSelectListVO>
	 */
	List<RoleSelectListVO> listRoleSelect(@Param("status") Integer status);

	/**
	 * 获取角色拥有的权限名称
	 *
	 * @param roleId 角色ID
	 * @return List<String>
	 */
	List<String> listModuleNamesByRoleId(Long roleId);

	/**
	 * 根据角色Id获取拥有的权限Id
	 *
	 * @param roleId
	 * @return
	 */
    List<String> listModuleIdsByRoleId(@Param("roleId") Long roleId);

	/**
	 * 根据用户查询角色
	 *
	 * @param userId
	 * @return
	 */
	List<Role> listRoleByUserId(@Param("userId") Long userId);

	/**
	 * 根据角色id获取该角色id都有哪些用户
	 *
	 * @param roleId
	 * @return
	 */
	List<Long> getUserIdByRoleId(@Param("roleId") Long roleId);

	/**
	 * 根据id删除角色
	 *
	 * @param roleId
	 */
	int deleteRoleByRoleId(@Param("roleId") Long roleId);
}